import os

from docx import Document
from base_agent import BaseAgent

analysis_prompt = """
你是一个宏观经济分析师，精通于中国国内的宏观经济分析，你的目标是以后续给你提供的宏观经济分析内容为基础，
在此基础上进行详细分析得出更为详细的分析结果，并按以下模版中列出的各项指标结合提供给你的分析结果重新将你的分析结果完整准确的填充入模版，
要求分析中包含准确数据说明以及基础内容，避免报告过于单薄。

对应数据: 
{data}

宏观经济分析内容: 
{user_input}

模版:
四、宏观与行业经济分析
（一）宏观分析
结构要求：（总分总结构，开始简述截止第一（二/三）季度宏观经济表现形式，然后分不同方面阐述，最后做总结面临的问题挑战、政策支持和未来展望等）
内容要求：简述当前年度宏观经济分析形式：结合已有数据分析
经济增长：2024年一季度GDP同比和环比数据，增速变化情况，不同产业（第一二三产业）的GDP变化情况；
需求端：固定资产投资变化情况，制造业、基础设施和房地产开发投资数据变化情况；
价格端：同时期的CPI数据，同比环比的变化情况，社会消费品零售总额的变化情况，增速的变化情况，食品和能源的的价格变化情况等；
收入端：全国居民可支配收入情况变化情况；
财政货币：M1、M2数据增速变化情况，基本的货币政策，投资情况等；
房地产行业：地产开发投资和新建商品房销售额以及面积等的变化情况，房地产最新政策等；
就业数据：城镇调查失业率数据和变化情况，以及青年失业率等数据变化情况；
（总结）经济形式和环境面临的问题和调整，宏观政策调控和支持，经济发展展望等；
（上述内容均为总结性描述，具体详细的数据内容对应下面的1-6点内容；）

1、GDP增长趋势
详细的GDP数据，包括GDP总值、同比增长、环比增长、增速变化情况，不同产业（第一二三产业）GDP变化情况和占比分布情况，再陈述整体的经济运行情况和发展态势。
产业增长的变化情况，增长最快的行业，高新技术发展情况等；
（附图：近二十年GDP增长率按季度变化情况）

2、货币供应量及金融行业
货币供应情况，包括M2/M1/M0及社融规模，主要包括总的余额规模、同比、环比变化等，以及增速的变化情况，各类别新增贷款情况；
货币供应量变化所反应出的问题；
（附图按月统计近五年M0/M1/M2增速的变化情况， M2-M1增速差的变化情况）

3、失业率
城镇失业率、青年失业率、不同年龄段失业率和大学生就业等数据及变化情况；
（附图按月统计近五年全国城镇调查失业率、16-24岁劳动力失业率、25-29岁劳动力失业率、30-59岁劳动力失业率变化情况）

4、居民消费价格指数
全国居民消费价格（CPI）同比和环比数据，具体分类价格变化情况；
（附图按月统计近10年CPI指数变化情况）

5、进出口活动
进出口总额数据及变化情况；
进口产品分类数据及变化情况；
出口产品分类数据及变化情况；

6、固定资产投资
固定资产投资变化情况，具体类别投资变化情况等；
（附图按月统计近五年固定资产投资增长率变化图）

（二）行业分析
1、建筑及房地产行业
房地产投资变化情况，整体运行态势和复苏情况；
（附图按月统计近五年建筑业总产值增长率变化情况）
（附图按月统计近五年住宅地产投资增长率变化情况）
（附图按月统计近五年新建商品房销售面积及销售额增长率变化情况）
（附图按月统计近五年住房现房和期房销售增长率变化情况）

2、社会零售及消费
社零总体数据、同比变化和环比变化，各类消费品零售额数据和变化情况；内需表现和政策支持等；
（附图按月统计近五年社会消费品零售总额同比增长率变化情况）
（附图按月统计近五年社零和网络零售增长率变化情况）

3、制造业
中国制造业采购经理指数（PMI）数据及变化情况，财新PMI变化情况等；
制造业发展现状和未来态势；
（附图按月统计近五年PMI指数、新出口订单指数、新订单指数）

（三）同业分析
消费贷行业增长情况：全国银行业消费金融余额、同比环比变化情况，不同期限的消费贷款余额变化；消费贷款规模变化反应的经济现状和原因分析；
消费金融领域头部平台规模的分析；市场和政策变化等方面的原因分析；
（附图按月统计近五年消费贷同比增长情况（长短期数据变化情况））
（附图按月统计近五年消费贷短期环比增长率变化情况）
消费贷市场竞争加剧：各大银行下场争夺消费市场份额，存款利率不断下行，为贷款利率的进一步下行提供了空间，各城商行和股份制银行消费贷的年华利率和额度现状，针对竞争加剧的现状我行应进行的应对策略；

（四）文献引用
1.银行家调查问卷-中国人民银行，调查统计司
2.企业家调查问卷-中国人名银行，调查统计司
3.统计数据-国家金融监督管理总局
4.月度、季度及年度经济统计数据-国家统计局
5.2024，中国个人借贷市场趋势研判：开门不红、弱复苏、新监管-知乎
"""


class ReporterAgent(BaseAgent):

    def __init__(self, task, model, plan_id, **kwargs):
        """
        初始化方法。

        参数:
        - task: 任务对象，包含待执行的任务信息。
        - model: 模型对象，用于执行任务的模型。
        - plan_id: 计划ID，标识任务所属的计划。
        - **kwargs: 额外的关键字参数，允许传递额外的配置信息。
        """
        super().__init__(model=model, **kwargs)  # 调用基类构造方法
        self.user_input = task['instruction']  # 设置用户输入，即任务的指令
        self.plan_id = plan_id  # 设置计划ID
        self.user_input = task['instruction']  # 再次设置用户输入，确保其值最新

    def get_content(self):
        file_name = self.plan_id + "_document.docx"
        file_path = os.path.join(f'./{self.plan_id}/', file_name)
        doc = Document(file_path)
        text = []
        for paragraph in doc.paragraphs:
            text.append(paragraph.text)
        content = '\n'.join(text)
        self.content = content

    def update_document(self):
        prompt = analysis_prompt.format(user_input=self.user_input, data=self.content)
        messages = [{'role': 'user', 'content': prompt}]
        print(prompt)
        resp = self._call_llm(messages=messages)
        print(resp)
        file_name = self.plan_id + "_document.docx"
        file_path = os.path.join(f'./{self.plan_id}/', file_name)
        doc = Document(file_path)
        doc.add_paragraph('——————————————————————————————————————————————————————————————————————————————\n\n\n\n\n\n\n')
        doc.add_paragraph(resp)
        doc.save(file_path)

    def run(self):
        try:
            self.get_content()
            self.update_document()
            return True
        except Exception as e:
            print(e)
            return False


if __name__ == '__main__':
    d = ReporterAgent(task={
        'instruction': '观察并整合所有分析结果，包括国内生产总值（名义本币）、国内生产总值（名义美元）、国内生产总值平减指数、国内生产总值（年增长率）以及基于购买力平价的国内生产总值在世界总量中的份额，构建一份全面的宏观经济报告。'},
                      model='qwen2-72b-instruct', plan_id='20240914142931_pR8fD4mI')
    d.run()